package com.hwsc.pay.service.impl;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.csii.test.sm.Sm4Util;
import com.hwsc.pay.constant.Constants;
import com.hwsc.pay.service.IPayService;
import com.ruoyi.common.config.RabbitMqConfig;
import com.ruoyi.common.entity.PaymentCallbackMessage;
import com.ruoyi.common.entity.TransStatusEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;

@Service
public class IPayServiceImpl implements IPayService{
    //日志
    private static final Logger log = LoggerFactory.getLogger(IPayServiceImpl.class);
    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * 生成支付 URL
     * @param merchantNo 商户号
     * @param merchantAmount 商户金额
     * @return 拼接后的支付 URL
     */
    @Override
    public String getPayUrl(String  token,String merchantNo, String merchantAmount) throws Exception {
        // 生成商户订单号
        String merchantOrderNo = generateMerchantOrderNo();

        // 获取当前日期和时间
        String merchantDate = DateUtil.formatDate(DateUtil.date()).replaceAll("-",""); // 格式化为 yyyy-MM-dd
        String merchantTime = DateUtil.formatTime(DateUtil.date()).replaceAll(":",""); // 格式化为 HH:mm:ss
//        String mw ="95162017372P010|JQ012025040908888392123|1|20250409|20250409161503|Y|https://dqvvs89v0z74.guyubao.com/pay/callback";
        // 拼接字符串
        String mw = StrUtil.join("|", merchantNo, merchantOrderNo, merchantAmount, merchantDate, merchantDate + merchantTime, "Y", Constants.PAY_NOTIFY_URL);
        log.info("请求参数: {}", mw);
        String url = Constants.PAY_URL_PERFIX + Sm4Util.encryptEcb(Constants.ENCRYPT_ECB_KEY_TEST, mw);
        log.info("请求地址: {}", url);
        PaymentCallbackMessage message = new PaymentCallbackMessage();
        message.setMerchantId(merchantNo);
        message.setOrderId(merchantOrderNo);
        message.setToken(token);
        //String 转 bigdecimal
        message.setTransAmount(new BigDecimal(merchantAmount));
        message.setMerTransDate(merchantDate + merchantTime);
        message.setTransStatus(TransStatusEnum.W);
        rabbitTemplate.convertAndSend(RabbitMqConfig.PRE_PAYMENT_EXCHANGE, RabbitMqConfig.PRE_PAYMENT_ROUTINGKEY, message);
        return url;
    }

    /**
     * 生成商户订单号
     * 格式：JQ02 + 当前日期时间（yyyyMMddHHmmssSSS） + 随机数字（4位）
     * @return 商户订单号
     */
    private static String generateMerchantOrderNo() {
        // 当前日期时间（yyyyMMddHHmmssSSS）
        String dateTimePart = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmssSSS");
        // 随机数字（4位）
        String randomPart = RandomUtil.randomNumbers(4);
        return "JQ02" + dateTimePart + randomPart;
    }

    @Override
    public List<String> queryOrderList(String userId) {
        return Collections.emptyList();
    }

}
